class Solution12 {
    // 全局变量
    // 标记最终结果
    int ret;
    // 路径 异或到path上 异或的结果
    int path;

    public int subsetXORSum(int[] nums) {
        return dfs(nums,0);
    }

    public int dfs(int[] nums,int pos) {
        // 进来的话，其实就是一个结果
        ret += path;
        for(int i = pos; i < nums.length;i++){
            // 开始异或
            path ^= nums[i];
            dfs(nums,i + 1);
            // 恢复现场 利用消消乐规律
            path ^= nums[i];
        }
        return ret;
    }
}